package it.unicam.ids.pvm.data;

import it.unicam.ids.pvm.distributore.TipoDistributore;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

/**
 * La classe rappresenta un'istanza per la configurazione dei dati 
 * d'accesso relativi al database.
 * Uso del design pattern Singelton.
 * @author Luca Iachini, Valerio Iachini, Alessandro Cardenà
 *
 */
public class Configurazione {
	
        static final String PATH = "./pvm.conf";//TODO cambiare il path
        private Properties props;
        static final String URL_PROPERTY ="URL";
        static final String SOURCE_TYPE_PROPERTY="SOURCE_TYPE";
        static final String USER_PROPERTY="USER";
        static final String PASSWORD_PROPERTY="PASSWORD";
        static final String DISTRBUTORE_TYPE="DISTRIBUTORE_TYPE";
        private static Configurazione instance;
        
        /**
         * Costruttore della classe.
         * Carica i dati di configurazione direttamente 
         * dal file pvm.conf.
         */
        
        private Configurazione() {
                props = new Properties();
                try {

                        props.load(new FileInputStream(PATH));

                }

                catch (IOException e) {
                        e.printStackTrace();//TODO
                }
        }
        
        /**
         * Il metodo restituisce l'istanza per la classe.
         * @return instance instanza per la classe.
         */
        
        public static Configurazione getInstance(){
                if(instance==null)
                        instance = new Configurazione();
                return instance;
        }
        
        /**
         * Il metodo restituisce l'url per l'accesso al database.
         * @return url url per l'accesso.
         */
        
        public String getUrl(){
                return props.getProperty(URL_PROPERTY);
        }
        
        /**
         * Il metodo restituisce il tipo di DBMS usato.
         * @return dataSuorceType DBMS usato.
         */
        
        public DataSourceType getDataSourceType(){
        	return DataSourceType.valueOf(props.getProperty(SOURCE_TYPE_PROPERTY));
        }
        
        /**
         * Il metodo restituisce l'username per l'accesso al database.
         * @return user username d'accesso.
         */
        
        public String getUser(){
                return props.getProperty(USER_PROPERTY);
        }
        
        /**
         * Il metodo restituisce la password per l'accesso al database.
         * @return password password d'accesso.
         */
        
        public String getPassword(){
                return props.getProperty(PASSWORD_PROPERTY);
        }
        
        /**
         * Il metodo restituisce il tipo di distributore.
         * @return tipoDistributore doppio o singolo.
         */
        
        public TipoDistributore getTipoDistributore(){
            return TipoDistributore.valueOf(props.getProperty(DISTRBUTORE_TYPE));
    }
        
}